
package com.dhcc.bpm.modules.api.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dhcc.bpm.modules.api.entity.Api;
import com.dhcc.bpm.modules.api.vo.ApiListVo;
import com.dhcc.bpm.modules.api.vo.ApiPageVO;
import com.dhcc.bpm.modules.api.vo.ApiVO;
import com.dhcc.bpm.modules.api.vo.ListAllApisVO;
import com.dhcc.bpm.modules.common.vo.SelectVo;
import com.dhcc.bpm.modules.log.vo.AppApiViewVo;
import org.springblade.core.mp.base.BaseService;

import javax.validation.constraints.NotEmpty;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * @ClassName IApiService
 * @Description api表 服务类
 * @Author daina
 * @Date 2020/2/25 15:22
 * @Version V1.0
 * @Copyright: 2020 东华软件 . All rights reserved.
 */
public interface IApiService extends BaseService<Api> {

	/**
	 * 自定义分页
	 *
	 * @param page
	 * @param api
	 * @return
	 */
	IPage<ApiVO> selectApiPage(IPage<ApiVO> page, ApiVO api);

	/**
	 * @author: 陈泽
	 * @date: 2019/12/13 18:22
	 * @description: 根据产品ID查询接口
	 * @param: [id]
	 * @return: java.util.List<com.dhcc.bpm.modules.api.entity.Api>
	 */
	IPage<ApiVO> ByProductId(IPage<ApiVO> page, ApiVO api);

	/**
	 * @author: 陈泽
	 * @date: 2019/12/13 18:22
	 * @description: 根据产品ID查询接口
	 * @param: [id]
	 * @return: java.util.List<com.dhcc.bpm.modules.api.entity.Api>
	 */
	IPage<ApiVO> getApiByProductId(IPage<ApiVO> page, ApiVO apivo);

	/**
	 * @author: 陈泽
	 * @date: 2019/12/13 18:22
	 * @description: 根据appId查询接口
	 * @param: [id]
	 * @return: java.util.List<com.dhcc.bpm.modules.api.entity.Api>
	 */
	IPage<ApiVO> getApiByAppId(IPage page, ApiVO apivo);

	IPage<ApiVO> getCostApiByProductId(IPage<ApiVO> page, ApiVO apivo);


	/**
	 * 查询api列表
	 *
	 * @return
	 * @paramapi
	 */
	IPage<ApiVO> selectControllerPage(IPage<ApiVO> page, ApiVO api);

	/**
	 * 查询未分配的api列表
	 *
	 * @param page
	 * @param api
	 * @return
	 */
	IPage<ApiVO> selectUnControllerApiList(IPage<ApiVO> page, ApiVO api);

	/**
	 * 查询api列表
	 *
	 * @return
	 * @paramapi
	 */
	IPage<ApiVO> selectProductApiList(IPage<ApiVO> page, ApiVO api);

	IPage<ApiVO> selectBaseProductApiList(IPage<ApiVO> page, ApiVO api);

	/**
	 * @param backserviceId
	 * @return java.util.List<com.dhcc.bpm.modules.api.vo.ApiVO>
	 * @Description 根据基础产品id查询
	 * @Author daina
	 * @Date 11:21 2020/4/3
	 **/
	List<ApiVO> listByBackserviceId(Long backserviceId);

	/**
	 * 查询api列表
	 *
	 * @return
	 * @paramapi
	 */
	IPage<ApiVO> selectSysApiList(IPage<ApiVO> page, ApiVO apiVO);

	/**
	 * 根据接口appId查询api列表
	 *
	 * @param appApiViewVo
	 * @return
	 */
	IPage<AppApiViewVo> selectAppApiList(IPage<AppApiViewVo> page, AppApiViewVo appApiViewVo);


	IPage<ApiVO> listInfo(IPage<ApiVO> page, ApiVO api);

	List<ApiVO> selectApiList(ApiVO api);

	IPage<ApiVO> listByProductId(IPage<ApiVO> page, ApiVO api);

	List<SelectVo> selectApiName();

	public String saveOpenapi(String apiCode, Map maps) throws IOException;

	/**
	 * 根据产品id查询接口
	 *
	 * @param page
	 * @param api
	 * @return
	 */
	IPage<ApiVO> getApiListByProductId(IPage<ApiVO> page, ApiVO api);

	/**
	 * 根据产品id查询接口
	 *
	 * @param productId
	 * @return
	 */
	List<ApiVO> getListByProductId(Long productId);

	/**
	 * 根据实例Id查询接口
	 *
	 * @param page
	 * @param api
	 * @return
	 */
	IPage<ApiVO> getApiListByCaseId(IPage<ApiVO> page, ApiVO api);

	/**
	 * 根据应用id统计接口数量
	 *
	 * @param appCode
	 * @return
	 */
	int selectApiCountById(String appCode);

	/**
	 * 查询产品下api集合
	 *
	 * @param page
	 * @param appApiViewVo
	 * @return
	 */
	IPage<AppApiViewVo> selectProApiList(IPage<AppApiViewVo> page, AppApiViewVo appApiViewVo);

	/**
	 * 根据应用id查询接口
	 *
	 * @param page
	 * @param api
	 * @return
	 */
	IPage<ApiVO> getApiListByAppId(IPage<ApiVO> page, ApiVO api);

	/**
	 * @param ids
	 * @return java.util.List<com.dhcc.bpm.modules.api.vo.ApiVO>
	 * @Description 根据apiIds获得批量接口列表
	 * @Date 2020/2/21 23:23
	 **/
	List<ApiVO> getListByIds(@NotEmpty List<Long> ids);

	/**
	 * @param apiId
	 * @return com.dhcc.bpm.modules.api.vo.ApiListVo
	 * @Description 根据id查询接口
	 * @Author sjm
	 * @Date 18:25 2020/2/27 0027
	 **/
	ApiListVo selectApiVoById(Long apiId);

	/**
	 * @param apiCode
	 * @return com.dhcc.bpm.modules.api.entity.Api
	 * @Description 根据apiCode查询api
	 * @Author daina
	 * @Date 18:58 2020/4/16
	 **/
	ApiListVo selectByApiCode(String apiCode);

	Boolean updateApiWithTransformProtocol(Api api);

	/**
	 * @param id
	 * @return java.util.List<com.dhcc.bpm.modules.api.entity.Api>
	 * @Description 根据渠道id查询接口
	 * @Author sjm
	 * @Date 11:27 2020/3/13 0013
	 **/
	List<Api> selectApiByAppId(Long id);

	/**
	 * @param apiNum
	 * @return java.util.List<com.dhcc.bpm.modules.api.vo.ApiVO>
	 * @throws
	 * @Description 编码判断是否重复
	 * @Author xiafayu
	 * @Date 2020/3/21 20:18
	 **/
	List<ApiVO> selectBySysNum(String apiNum);

	/**
	 * @param page
	 * @param api
	 * @return com.baomidou.mybatisplus.core.metadata.IPage<com.dhcc.bpm.modules.api.vo.ApiVO>
	 * @Description 某一api下回调地址列表
	 * @Author Mdd
	 * @Date 2020/4/10 15:12
	 **/
	IPage<ApiVO> callBackList(IPage<ApiVO> page, ApiVO api);

	/**
	 * @return int
	 * @Description 刷新网关路由
	 **/
	int updateRefreshStatus(ApiVO api);

	List<ListAllApisVO> listAllApis();

	List<Api> getProdApiByProductId(Long productId);

	List<Long> getProdApiIdsByProductId(Long productId);

	List<String> getApiBySysId(Long sysId);

	List<Long> getApiIdsBySysId(String sysId);

	/**
	 * 根据产品id查询接口
	 *
	 * @param productId
	 * @return
	 */
	List<ApiVO> findApiByProductId(Long productId);

	IPage<ApiPageVO> selectPage(IPage<ApiPageVO> page, ApiVO api);

}
